/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.siseventos.managed;

import br.siseventos.dao.ServicoDao;
import br.siseventos.model.TbServico;
import br.siseventos.view.util.CallbackHelper;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.context.RequestContext;

/**
 *
 * @author LeandroSilvaMoura
 */
@ManagedBean(name = "servicoBean")
@ViewScoped
public class ServicoBean extends BaseBean{
    
    // Campos
    private String nome;
    private String descricao;
    private TbServico servicoSelecionado;
    private List<TbServico> lstDataTableServico;
    private ServicoDao daoServico;
    
    // Construtor
    public ServicoBean() {
        // Inicializando as DAOs
        daoServico = new ServicoDao();
        try {
            // Inicializando as listas
            lstDataTableServico = daoServico.consultarTodos();
        } catch (Exception ex) {
            
        }
    }
    
    // Getters e Setters

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the descricao
     */
    public String getDescricao() {
        return descricao;
    }

    /**
     * @param descricao the descricao to set
     */
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    /**
     * @return the servicoSelecionado
     */
    public TbServico getServicoSelecionado() {
        return servicoSelecionado;
    }

    /**
     * @param servicoSelecionado the servicoSelecionado to set
     */
    public void setServicoSelecionado(TbServico servicoSelecionado) {
        this.servicoSelecionado = servicoSelecionado;
    }

    /**
     * @return the lstDataTableServico
     */
    public List<TbServico> getLstDataTableServico() {
        return lstDataTableServico;
    }

    /**
     * @param lstDataTableServico the lstDataTableServico to set
     */
    public void setLstDataTableServico(List<TbServico> lstDataTableServico) {
        this.lstDataTableServico = lstDataTableServico;
    }

    /**
     * @return the daoServico
     */
    public ServicoDao getDaoServico() {
        return daoServico;
    }

    /**
     * @param daoServico the daoServico to set
     */
    public void setDaoServico(ServicoDao daoServico) {
        this.daoServico = daoServico;
    }
    
    
    // Actions e Listeners

    public void cadastrarServico(ActionEvent e) {
        try {
            // Cadastrando o novo serviço
            
            TbServico t = new TbServico(getNome(), getDescricao(), null, null, null);
            daoServico.incluir(t);
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Serviço cadastrado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de serviços
            lstDataTableServico = daoServico.consultarTodos();
            
            // Invocando script no cliente
            RequestContext rc = RequestContext.getCurrentInstance();
            rc.addCallbackParam("servicoSalvo", true);
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao cadastrar servico!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void excluirServico(ActionEvent e) {
        try {
            // Excluindo o servico selecionado
            daoServico.excluir(getServicoSelecionado().getIdtServico());
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Serviço excluído com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de serviços
            lstDataTableServico = daoServico.consultarTodos();
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao excluir serviço!", FacesMessage.SEVERITY_ERROR);
        }
    }

    public void alterarServico(ActionEvent e) {
        try {
            // Alterando o serviço selecionado
            daoServico.alterar(getServicoSelecionado());
            
            // Mostrando mensagem de sucesso
            mostrarMensagemGlobal("Serviço alterado com sucesso!", FacesMessage.SEVERITY_INFO);
            
            // Repopulando a lista de serviços
            lstDataTableServico = daoServico.consultarTodos();
            
            // Setando os parametros de callback
            CallbackHelper.addCallback("editado", true);
        } catch (Exception ex) {
            // Mostrando mensagem de erro
            mostrarMensagemGlobal("Erro ao alterar serviço!", FacesMessage.SEVERITY_ERROR);
        }
    }
    // Util

    public void mostrarMensagemGlobal(String sumario, FacesMessage.Severity nivel) {
        FacesContext contexto = FacesContext.getCurrentInstance();
        FacesMessage msg = new FacesMessage(nivel, sumario, "");
        contexto.addMessage(null, msg);
    
    }
}
